﻿using System;
using CoopSaude.RHFinanceiro;
using System.Collections;
using System.Collections.Generic;

namespace CoopSaude.DAO
{
    /* Bueno */
    public class RHFinanceiroDAO
    {
        private static Fabrica10SoapClient ws;

        /*implementação do singleton*/
        public static Fabrica10SoapClient Websservice
        {
            get
            {
                if (ws == null)
                {
                    try
                    {
                        ws = new Fabrica10SoapClient();
                    }
                    catch (Exception e)
                    {
                        throw e;
                    }
                }
                return ws;
            }
        }

        /*reseta objeto*/
        public static void ResetWS()
        {
            ws = null;
        }

        #region funcionarios
        public static SerializedFuncionario[] visualizarFuncionarios()
        {
            try
            {
                return Websservice.VisualizarFuncionarios();
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

		public static SerializedFisioterapeuta[] ListarFisioterapeutas()
		{
			try
			{
				return Websservice.VisualizarFisioterapeutas();
			}
			catch (Exception e)
			{
				ResetWS();
                throw e;
			}
		}

        public static SerializedFuncionario obterFuncionario (int idFuncionario)
        {
            try
            {
                return Websservice.GetFuncionario(idFuncionario);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static SerializedMedico adicionarMedico(int idDepartamento, string nome, string cpf, string endereco, string cidade, string estado, string telefone1, string telefone2, string rg, decimal salarioHora)
        {
            try
            {
                return Websservice.CadastrarMedico(idDepartamento, nome, cpf, endereco, cidade, estado, telefone1, telefone2, rg, salarioHora);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static SerializedFisioterapeuta adicionarFisioterapeuta(int idDepartamento, string nome, string cpf, string endereco, string cidade, string estado, string telefone1, string telefone2, string rg, decimal salarioHora)
        {
            try
            {
                return Websservice.CadastrarFisioterapeuta(idDepartamento, nome, cpf, endereco, cidade, estado, telefone1, telefone2, rg, salarioHora);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static Boolean desativarFuncionario(int idFuncionario)
        {
            try
            {
                return Websservice.DesativarFuncionario(idFuncionario);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static void atualizarFuncionario(int IdFuncionario, int IdDepartamento, string Nome, string CPF, string Endereco, string Cidade, string Estado, string Telefone1, string Telefone2, string RG, decimal SalarioHora, string AtendimentoPaciente)
        {
            try
            {
                Websservice.AtualizarFuncionario(IdFuncionario, IdDepartamento, Nome, CPF, Endereco, Cidade, Estado, Telefone1, Telefone2, RG, SalarioHora, AtendimentoPaciente);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static SerializedMedico[] ListarMedicos()
        {
            try 
            {
                return Websservice.VisualizarMedicos();
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }
        #endregion

        #region departamento

        public static SerializedDepartamento[] listarDepartamentos()
        {
            try
            {
                return Websservice.visualizarDepartamentos();
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        #endregion

        #region notafiscal

        public static SerializedDespesa[] getNotaFiscal(string idPaciente, DateTime inicio, DateTime final)
        {
            try
            {
                return Websservice.getNotaFiscal(idPaciente, inicio, final);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        #endregion

        #region notificacoes
        public static Boolean notificarInicioAtendimentoMedico(int idMedico, string idPaciente)
        {
            try
            {
                return Websservice.ReceberInicioAtendimentoMedico(idMedico, idPaciente);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static Boolean notificarFimAtendimentoMedico(int idMedico, string idPaciente)
        {
            try
            {
                return Websservice.ReceberFimAtendimentoMedico(idMedico, idPaciente);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static Boolean notificarInicioSessaoFisioterapia(int idFisio, string idPaciente)
        {
            try
            {
                return Websservice.ReceberInicioAtendimentoFisioterapeuta(idFisio, idPaciente);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        public static Boolean notificarFimSessaoFisioterapia(int idFisio, string idPaciente)
        {
            try
            {
                return Websservice.ReceberFimAtendimentoFisioterapeuta(idFisio, idPaciente);
            }
            catch (Exception e)
            {
                ResetWS();
                throw e;
            }
        }

        #endregion

        #region tipo de funcionario
        public static Dictionary<string, string> listarTiposFuncionarios()
        {
            var dict = new Dictionary<string, string>();
            dict.Add("0", "Médico");
            dict.Add("1", "Fisioterapeuta");
            return dict;
        }
        #endregion
    }
}